package day8;

import java.util.Arrays;

import org.junit.Test;

public class StringDemo {

	@Test
	public void test1() {
		// "abc"双引号括起来的字符串：常量字符串，他也是一个对象
		// 1.8之后常量池放到堆，在常量池里面找有没有这个"abc"对象，
		// 如果常量池里面没有这个字符串对象，java就帮你在常量池里面new一个"abc"字符串对象。
		// 如果常量池里面有这个字符串，就把这个字符串的地址赋给这个变量。
		String str1 = "abc";
		String str2 = new String("abc");
		String str3 = "abc";
		// ==比较的是变量指向的对象的地址值
		System.out.println(str1 == str2);// false
		System.out.println(str1 == str3);// true
		System.out.println(str2 == str3);// false
		
		// 比较字符串的内容是不是相等使用equals()
		// 表str1这个字符串和str2这个字符串的内容是不是相等
		System.out.println(str1.equals(str2));// true
		System.out.println(str1.equals(str3));// true
		System.out.println(str2.equals(str3));// true
	}
	
	@Test
	public void test2() {
		String str = "java AndroidA";
		System.out.println(str.length());// 13
		char[] array = str.toCharArray();
		System.out.println(Arrays.toString(array));
		char ch = str.charAt(5);
		System.out.println(ch);//A
		
		System.out.println(str.indexOf('A'));// 5
		// 如果字符串里面不存在这个字符，返回-1
		System.out.println(str.indexOf('X'));// -1
		System.out.println(str.indexOf('A', 6));// 12
		System.out.println(str.indexOf("And"));// 5
		
		System.out.println(str.lastIndexOf('A'));// 12
	}
	
	@Test
	public void test4() {
		String str = "java AndroidA";
		System.out.println(str.contains("And"));// true
		System.out.println(str.startsWith("java"));// true
		System.out.println(str.endsWith("idA"));// true
		System.out.println(str.isEmpty());// false
		// ""空字符串，这也是一个字符串对象
		System.out.println("".isEmpty());// true
	}
	
	@Test
	public void test5() {
		// String str = "java AndroidA";
		char[] array = {'j', 'a', 'v', 'a', ' ', 'A', 'n', 'd'};
		String str = new String(array);
		System.out.println(str);
	}
	
	@Test
	public void test6() {
		String str = "java AndroidA";
		String newStr = str.replace('A', 'B');
		System.out.println(str);// java AndroidA
		System.out.println(newStr);// java BndroidB
	}
	
	@Test
	public void test7() {
		// 正则表达式
		String str = "java Android Python";
		String[] array = str.split(" ");
		System.out.println(Arrays.toString(array));// [java, Android, Python]
	}
	
	@Test
	public void test8() {
		// subtree：子树  substring:子字符串
		String str = "java AndroidA";
		System.out.println(str.substring(5));// AndroidA
		System.out.println(str.substring(5, 8));// 
	}
	
	@Test
	public void test9() {
		String str = "    java AndroidA    ";
		System.out.println(str);
		System.out.println(str.trim());
	}
	
	@Test
	public void test10() {
		String str1 = "Hello";
		String str2 = "Java";
		String str3 = "Android";
		String str4 = "Python";
		// String的长度是不能改变，每次变量的拼接其实是new了一个新的字符串对象，
		// 在String字符串变量拼接（+）会创建很多字符串对象
		String str = str1 + str2 + str3 + str4;
		System.out.println(str);
		// 在有很多字符串变量拼接时候不使用String，使用StringBuilder或者StringBuffer
		StringBuffer buffer = new StringBuffer(str1);
		buffer.append(str2);
		buffer.append(str3);
		buffer.append(str4);
		System.out.println(buffer);
		
		StringBuilder builder = new StringBuilder(str1);
		builder.append(str2);
		builder.append(str3);
		builder.append(str4);
		System.out.println(builder);
		
	}
	
	@Test
	public void test55() {
		String str = "I Love Java！";
		System.out.println(str.toUpperCase());
		boolean b1 = str.equalsIgnoreCase("i love java！");
		System.out.println(b1);
	}
	
}
